package sv.ues.fia.fragmentcontrol;

import java.util.ArrayList;
import java.util.Calendar;
import java.util.List;
import android.os.Bundle;
import android.support.v4.app.Fragment;
import android.view.LayoutInflater;
import android.view.View;
import android.view.View.OnClickListener;
import android.view.ViewGroup;
import android.widget.AdapterView;
import android.widget.AdapterView.OnItemClickListener;
import android.widget.AdapterView.OnItemSelectedListener;
import android.widget.ArrayAdapter;
import android.widget.Button;
import android.widget.EditText;
import android.widget.ListView;
import android.widget.Spinner;
import android.widget.TextView;
import android.widget.Toast;
import sv.ues.fia.R;
import sv.ues.fia.bdcontrol.ControlBDHelper;
import sv.ues.fia.clases.SearchListItem;
import sv.ues.fia.clases.SearchListItemAdapter;
import sv.ues.fia.entity.Docente;
import sv.ues.fia.entity.DocenteAsignado;
import sv.ues.fia.entity.TrabajoGraduacion;

public class DocenteAsignadoFragment extends Fragment {

	public int currentPage;
	/** DECLARAR AQUI LOS OBJETOS VIEW **/
	public ListView lvResultDoceAsig;
	public List<DocenteAsignado> listResultDocAsig;
	public List<SearchListItem> listItemsResult;
	public SearchListItemAdapter adapter;

	@Override
	public void onCreate(Bundle savedInstanceState) {
		super.onCreate(savedInstanceState);

		/** Getting the arguments to the Bundle object */
		Bundle data = getArguments();

		/** Getting integer data of the key current_page from the bundle */
		currentPage = data.getInt("current_page", 0);
		listItemsResult = new ArrayList<SearchListItem>();

	}

	@Override
	public View onCreateView(LayoutInflater inflater, ViewGroup container,
			Bundle savedInstanceState) {
		View v = null;
		
		/** PAGINA 1 **/
		if (currentPage == 1) {
			
			// Cargar LAYOUT de la Pagina 1
			v = inflater.inflate(R.layout.activity_docasignado_insertar, container, false);

			final ControlBDHelper db = new ControlBDHelper(this.getActivity());
			
			// Listas para los espinner
			List<TrabajoGraduacion> listTG = null;
			List<Docente> listDocentes = null;

			Button btnSave = (Button) v.findViewById(R.id.btnSaveDocAsig);
			
			final EditText edtPorcent = (EditText) v.findViewById(R.id.edtPorcentDocente);
			final TextView tvPorcent = (TextView) v.findViewById(R.id.tvPercent);
			final Spinner spIdDocente = (Spinner) v.findViewById(R.id.spIdDocente);
			final Spinner spTrabGrad = (Spinner) v.findViewById(R.id.spTG);
			final Spinner spTipoDoc = (Spinner) v.findViewById(R.id.spTipoDocente);					

			
			/** CONSULTAR BD PARA LLENAR ESPINNERS **/
			db.abrir();
			listTG = db.consultarTG("");
			listDocentes = db.consultarDocente("");
			db.cerrar();

			ArrayAdapter<Docente> spinnerTipoAdapter = new ArrayAdapter<Docente>(
					getActivity(),
					android.R.layout.simple_spinner_dropdown_item, listDocentes);
			
			spIdDocente.setAdapter(spinnerTipoAdapter);
			
			ArrayAdapter<TrabajoGraduacion> spinnerTGAdapter = new ArrayAdapter<TrabajoGraduacion>(
					getActivity(),
					android.R.layout.simple_spinner_dropdown_item, listTG);
			
			spTrabGrad.setAdapter(spinnerTGAdapter);
			
			/** Verificar porcentaje de Nota total para un TG **/
			
			db.abrir();
			TrabajoGraduacion selected = (TrabajoGraduacion)spTrabGrad.getSelectedItem();
			List<DocenteAsignado> listaPorcent;
			if(!listTG.isEmpty()) {
				listaPorcent = db.consultarDocAsig("",selected.getIdTG());
			}else {
				listaPorcent = new ArrayList<DocenteAsignado>();
			}
			db.cerrar();
			
			float porcentTotal= 100F;
			for(DocenteAsignado x: listaPorcent){
				porcentTotal-=x.getPorcentNota();
			}
			
			tvPorcent.setText(getActivity().getString(R.string.requiredPorcent)+" "+String.valueOf(porcentTotal));
			
			spTrabGrad.setOnItemSelectedListener(new OnItemSelectedListener() {
				
				@Override
				public void onItemSelected(AdapterView<?> arg0, View arg1,
						int arg2, long arg3) {					
					db.abrir();
					TrabajoGraduacion selected = (TrabajoGraduacion)spTrabGrad.getItemAtPosition(arg2);
					List<DocenteAsignado> listaPorcent = db.consultarDocAsig("",selected.getIdTG()); 
					db.cerrar();
					
					float porcentTotal=100F;
					for(DocenteAsignado x: listaPorcent){
						porcentTotal-=x.getPorcentNota();
					}
					
					tvPorcent.setText(getActivity().getString(R.string.requiredPorcent)+" "+String.valueOf(porcentTotal));
										
				}

				@Override
				public void onNothingSelected(AdapterView<?> arg0) {
					// TODO Auto-generated method stub
					
				}
			});
			
			/** ACCION DEL BOTON INSERTAR NUEVO REGISTRO **/
			btnSave.setOnClickListener(new OnClickListener() {

				@Override
				public void onClick(View v) {
					if(edtPorcent.getText().toString().isEmpty()){
						Toast.makeText(getActivity(), getActivity().getString(R.string.emptyForm),
								Toast.LENGTH_LONG).show();
					}else{
						Calendar calendar = Calendar.getInstance();
						int year = calendar.get(Calendar.YEAR);
	
						TrabajoGraduacion selectedTG = (TrabajoGraduacion) spTrabGrad.getSelectedItem();
						
						db.abrir();					
						List<DocenteAsignado> listaPorcent = db.consultarDocAsig("",selectedTG.getIdTG()); 
						db.cerrar();
						
						boolean noExiste = true;
						int tipoDocentePosition = spTipoDoc.getSelectedItemPosition();
						char tipoDocente;
						if(tipoDocentePosition==0){
							tipoDocente = 'D';
						}else{
							tipoDocente = 'O';
						}
						
						float porcentTotal=100 - Float.valueOf(edtPorcent.getText().toString());
						for(DocenteAsignado x: listaPorcent){
							porcentTotal-=x.getPorcentNota();
							if(x.getTipoDocente()==tipoDocente)
								noExiste = false;
						}
												
						
						
						if(porcentTotal >= 0 && noExiste){
						
							
							Docente selectedDocente = (Docente) spIdDocente.getSelectedItem();																
		
							DocenteAsignado newDocAsig = new DocenteAsignado();
							
							newDocAsig.setAnioAsignado(year);
							newDocAsig.setIdDocente(selectedDocente.getIdDocente());
							newDocAsig.setIdTG(selectedTG.getIdTG());
							newDocAsig.setPorcentNota(Integer.valueOf(edtPorcent.getText().toString()));
							newDocAsig.setTipoDocente(tipoDocente);
		
							db.abrir();
							Toast.makeText(getActivity(), db.insertar(newDocAsig),
									Toast.LENGTH_LONG).show();															
							
							listaPorcent = db.consultarDocAsig("",selectedTG.getIdTG()); 
							db.cerrar();
							
							porcentTotal=100L;
							for(DocenteAsignado x: listaPorcent){
								porcentTotal-=x.getPorcentNota();
							}
							
							tvPorcent.setText(getActivity().getString(R.string.requiredPorcent)+" "+String.valueOf(porcentTotal));
							
						}else{
							
							if(!noExiste){
							
								Toast.makeText(getActivity(), getActivity().getString(R.string.typeDuplicated),
										Toast.LENGTH_LONG).show();
								
							}else{
								
								Toast.makeText(getActivity(), getActivity().getString(R.string.percentExceed),
										Toast.LENGTH_LONG).show();
							
							}
						}
					}
				}
			});
			
		/** PAGINA 2 **/
		} else if (currentPage == 2) {
			
			final ControlBDHelper db = new ControlBDHelper(getActivity());
			
			// Cargar LAYOUT de la Pagina 2
			v = inflater.inflate(R.layout.activity_docasignado_buscar, container,false);

			lvResultDoceAsig = (ListView) v.findViewById(R.id.ListResultDocAsig);
			
			final EditText edtIdDoc = (EditText) v.findViewById(R.id.edtIdDocente);
			final EditText edtIdTG = (EditText) v.findViewById(R.id.edtIdTG);
			
			ListView search = (ListView) v.findViewById(R.id.listOptionSearch);
			
			/** LISTENER DEL BOTON BUSCAR **/
			search.setOnItemClickListener(new OnItemClickListener() {

				@Override
				public void onItemClick(AdapterView<?> arg0, View arg1,
						int arg2, long arg3) {
					
					/** CONSULTAR LISTADO DE PERFILES SEGUN ID O NOMBRE **/
					db.abrir();					
					listResultDocAsig = db.consultarDocAsig(edtIdDoc.getText()
							.toString(), edtIdTG.getText().toString());					
					db.cerrar();
					
					/** VACIAR RESULTADOS ANTES DE AGREGAR LOS NUEVOS **/
					listItemsResult.clear();
					
					/** LLENAR OTRA LISTA SOLO PARA AGREGARLO AL LISTVIEW **/
					for(DocenteAsignado x: listResultDocAsig){
						
						SearchListItem item = new SearchListItem();
						
						// Se le asigna un TITULO 
						item.setTitle(getActivity().getString(R.string.idDocenteForm)+" "+ String.valueOf(x.getIdDocente()));
						
						// Se le asigna un SUBTITULO
						item.setSubTitle(getActivity().getString(R.string.idTG) +" "+x.getIdTG());
						listItemsResult.add(item);						
					}
					
					adapter.notifyDataSetChanged();
					
				}

			});
			
			/** SE CREA EL ADAPTER PERSONALIZADO PARA EL LISTVIEW **/
			adapter = new SearchListItemAdapter(this.getActivity(),
					listItemsResult);

			lvResultDoceAsig.setAdapter(adapter);

			this.getActivity().registerForContextMenu(lvResultDoceAsig);

		}
		return v;
	}

}
